#include<stdio.h>
#include<stdlib.h>
#include "dsstring.h"
//暴力搜索
//考虑到代码可读性与美观性,故增加两个函数,用来代替strlen并判断是否替换
//与CSDN上其他大佬相比,感觉我的思路更清晰(bushi)
int str_len(const char *a){
    int i=0;
    while(a[i]!='\0'){
        i++;
    }
    return i;
}
int if_change(const char *in,int index,int in_len,const char *old,const char *new,int outlen){//in_len为in长度,index为in的数组索引,其余如题
    if((in_len+1-str_len(old)+str_len(new))>outlen){//通过in数组长度变化来判断是否越界
        return 0;
    }else{
        int count=0;
        while(in[index]==old[count]&&count<str_len(old)&&index<str_len(in)){//逐个匹配
            index++;
            count++;
        }
        if(count<str_len(old)){//是否完全匹配
            return 0;
        }else{
            return 1;
        }
    }
}

int str_replace(const char *in, char *out, int outlen, const char *oldstr, const char *newstr) {
    int i=0,j=0,count=0;//i为in数组下标,j为out数组下标,count计数器
    int in_len=str_len(in);
    while(in[i]!='\0'){
        if(if_change(in , i , in_len , oldstr , newstr , outlen)==0){
            out[j]=in[i];//不替换则直接复制
            i++;
            j++;
        }else{
            i=i+str_len(oldstr);//i跳过oldstr串
            for(int m=0;m<str_len(newstr);m++){//替换成新串
                out[j]=newstr[m];
                j++;
            }
            in_len=in_len-str_len(oldstr)+str_len(newstr);//in数组长度更新
            count++;
        }
    }
    out[j]='\0';//封尾
    return count;
}